home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / pdoxwin / pi0994.zip / JM0994.EXE / TRACUTIL.SC next >
Text File  |  1994-06-02  |  19KB  |  514 lines

  1. ;************************************************************************
  2. ;  The following Utility Library of procedures are:
  3. ;
  4. ;     Copyrighted (c) 1992-94 Micro-Phyla Systems  All Rights Reserved
  5. ;     Author: John B. Moore
  6. ;     5256 South Mission Rd. Suite #110
  7. ;     Bonsall Calif. 92003
  8. ;     (619) 631-3085
  9. ;
  10. ;  This code is available as supplimental procedures for the TracTuner
  11. ;  Utilities and as samples for educational purposes. Using these procedures
  12. ;  outside the scope of these utilities is the sole reponsibility of the
  13. ;  user.
  14. ;**************************************************************************
  15.  
  16. ; ============================================================
  17. ; 10-05-92
  18. ; Creates a variable length message window in the lower
  19. ; center of the workspace, single line. Cannot exceed 65 characters
  20. ; A null string "" cancels window
  21. ; The string "work" places the window with "Working...!" in it.
  22. ; ------------------------------------------------------------
  23. PROC QuickMsg_u(msg_a)
  24.    PRIVATE Procname.a,
  25.            current_h,
  26.            width_n,
  27.            origincol_n
  28.    Procname.a = "QuickMsg_u"
  29.    ;---check for null string to cancel window if it exists
  30.    IF  msg_a = ""  AND
  31.        ISASSIGNED(g_handle_bag["QUICK"]) THEN
  32.        ChiseledBoxDestructor_l("QUICK")
  33.        RETURN
  34.    ENDIF
  35.    IF  msg_a = ""  AND
  36.        NOT ISASSIGNED(g_handle_bag["QUICK"]) THEN
  37.        RETURN
  38.    ENDIF
  39.    ;--check and see if window already exists, if so clear IT
  40.    IF ISASSIGNED(g_handle_bag["QUICK"]) THEN
  41.       ChiseledBoxDestructor_l("QUICK")
  42.    ENDIF
  43.    ;--first make sure string is not to large,
  44.    msg_a = SUBSTR(msg_a,1,65)
  45.    IF msg_a = "work" THEN
  46.       width_n = 12 + 4
  47.    ELSE
  48.       width_n = LEN(msg_a) + 13
  49.       wmsg_n = LEN(msg_a)
  50.    ENDIF
  51.    origincol_n = INT((80 - width_n)/2)
  52.    ;--create window
  53.       ChiseledBoxMaker_u(19,origincol_n,width_n,3,
  54.                          32,47,"QUICK")
  55.    ;--write text to box
  56.    IF msg_a = "work" THEN
  57.       STYLE ATTRIBUTE 46
  58.           @ 1,2 ?? "Working"
  59.       STYLE ATTRIBUTE 164
  60.           @ 1,9 ?? "....!"
  61.       STYLE
  62.    ELSE
  63.       STYLE ATTRIBUTE 32
  64.           @ 1,2 ?? msg_a
  65.       STYLE ATTRIBUTE 164
  66.           @ 1,wmsg_n + 2 ?? "....!"
  67.       STYLE
  68.    ENDIF
  69. ENDPROC
  70. ;("QuickMsg_u")
  71.  
  72.  
  73. ; ============================================================
  74. ; 10-05-92
  75. ; Creates a window with chisled box double border
  76. ; Also creates a global handle in g_handle_bag  Dynarray  with
  77. ; index specified with var index_a
  78. ; ------------------------------------------------------------
  79. PROC ChiseledBoxMaker_u(row_n,col_n,width_n,height_n,color_n,hilite_n,index_a)
  80.    PRIVATE Procname.a,
  81.            current_h,
  82.            fcurrent_h
  83.    Procname.a = "ChiseledBoxMaker_u"
  84.    ;----grab current table image cursor location
  85.    IF NIMAGES() > 0 THEN
  86.      IF ISFIELDVIEW() THEN
  87.         current_h = GetMemoWindowHandle_h()
  88.         fcurrent_h = 0
  89.       ELSE
  90.          WINDOW HANDLE IMAGE IMAGENO() TO current_h
  91.          WINDOW HANDLE FORM TO fcurrent_h
  92.       ENDIF
  93.    ENDIF
  94.    IF NOT ISASSIGNED(g_handle_bag) THEN
  95.       DYNARRAY g_handle_bag[]
  96.    ENDIF
  97.    ;---create dynarray attributes to format the window canvas
  98.    DYNARRAY attrib_bag[]
  99.               attrib_bag["CANVASHEIGHT"] = height_n
  100.               attrib_bag["CANVASWIDTH"]  = width_n
  101.               attrib_bag["CANCLOSE"]     = false
  102.               attrib_bag["CANMAXIMIZE"]  = false
  103.               attrib_bag["CANMOVE"]      = false
  104.               attrib_bag["CANRESIZE"]    = false
  105.               attrib_bag["ECHO"]         = true
  106.               attrib_bag["HASFRAME"]     = false
  107.               attrib_bag["STYLE"]        = color_n
  108.  
  109.    WINDOW CREATE FLOATING @ row_n ,col_n
  110.           HEIGHT height_n
  111.           WIDTH width_n
  112.           ATTRIBUTES attrib_bag TO  g_handle_bag[index_a]
  113.    ;---set canvas to canvas window
  114.    SETCANVAS g_handle_bag[index_a]
  115.    ;--create chiseled frame  in the canvas window
  116.    FRAME DOUBLE FROM 0,0 TO height_n-1, width_n - 1
  117.    PAINTCANVAS ATTRIBUTE hilite_n 0,0,height_n-1,0
  118.    PAINTCANVAS ATTRIBUTE hilite_n 0,0,0,width_n - 2
  119.    ;--return cursor to original location
  120.    IF NIMAGES() > 0 THEN
  121.      IF fcurrent_h <> 0 THEN
  122.         WINDOW SELECT fcurrent_h
  123.         WINDOW SELECT fcurrent_h
  124.       ELSE
  125.          WINDOW SELECT current_h
  126.          WINDOW SELECT current_h
  127.       ENDIF
  128.    ENDIF
  129. ENDPROC
  130. ;("ChiseledBoxMaker_u")
  131.  
  132. ; ============================================================
  133. ; 10-05-92
  134. ; Closes box created by "ChiseledBoxMaker_u"
  135. ; Returns true if successful, false if window handle does not exist
  136. ; ------------------------------------------------------------
  137. PROC ChiseledBoxDestructor_l(index_a)
  138.    PRIVATE Procname.a,
  139.            current_h
  140.    Procname.a = "ChiseledBoxDestructor_l"
  141.       IF ISASSIGNED(g_handle_bag[index_a]) AND
  142.          ISWINDOW(g_handle_bag[index_a]) THEN
  143.          WINDOW HANDLE CURRENT TO current_h
  144.          WINDOW SELECT g_handle_bag[index_a]
  145.          WINDOW CLOSE
  146.          IF ISWINDOW(current_h) THEN
  147.            WINDOW SELECT current_h
  148.            WINDOW SELECT current_h
  149.          ENDIF
  150.          RELEASE VARS g_handle_bag[index_a] , attrib_bag
  151.          SETCANVAS DEFAULT
  152.          RETURN true
  153.       ELSE
  154.          RETURN false
  155.       ENDIF
  156. ENDPROC
  157. ;("ChiseledBoxDestructor_l")
  158.  
  159. ; ============================================================
  160. ; 09-07-92
  161. ; General message utility
  162. ;  -each "line" must be followed by a "/"
  163. ; ------------------------------------------------------------
  164. PROC GeneralMessage_u(text_a)
  165.    PRIVATE Procname_a,
  166.            dialog_w,
  167.            lines_n,
  168.            maxline_n,
  169.            row_n,
  170.            column_n,
  171.            oldcolor_bag,
  172.            newcolor_bag,
  173.            oldcanvas_h
  174.    Procname.a = "GeneralMessage_u"
  175.      DYNARRAY message_bag[]
  176.      lines_n = 1
  177.      maxline_n = 0
  178.      WHILE MATCH(text_a,"../..",message_bag[STRVAL(lines_n)],text_a)
  179.           maxline_n = MAX(LEN(message_bag[STRVAL(lines_n)]),maxline_n)
  180.           lines_n = lines_n +1
  181.      ENDWHILE
  182.      IF lines_n = 0 THEN
  183.         maxline_n = LEN(text_a)
  184.      ENDIF
  185.      row_n = INT((23 -lines_n+4)/2)
  186.      column_n = INT((79-maxline_n+4)/2)
  187.       GETCOLORS TO oldcolor_bag
  188.         DYNARRAY newcolor_bag[]
  189.            newcolor_bag[1032] = 32
  190.            newcolor_bag[1031] = 32
  191.            newcolor_bag[1045] = 32
  192.            newcolor_bag[1036] = 32
  193.            newcolor_bag[1042] = 78
  194.         SETCOLORS FROM newcolor_bag
  195.         BEEP BEEP SLEEP 100 BEEP BEEP SLEEP 100 BEEP BEEP
  196.  
  197.   SHOWDIALOG "Message"
  198.       PROC "InsertMessage_u" TRIGGER "OPEN"
  199.      @row_n,column_n HEIGHT lines_n + 4 WIDTH maxline_n +4
  200.  
  201.      PUSHBUTTON @lines_n,INT((maxline_n/2)-6) WIDTH 12
  202.         "Continue"
  203.         OK
  204.         DEFAULT
  205.         VALUE true
  206.         TAG "continue"
  207.         TO okkey_l
  208.   ENDDIALOG
  209.   SETCOLORS FROM oldcolor_bag
  210.   SETCANVAS DEFAULT
  211. ENDPROC
  212. ;("GeneralMessage_u")
  213.  
  214. ; ============================================================
  215. ; 09-07-92
  216. ; A dialog proc for inserting message into GeneralMessage_u
  217. ;  --the vars a,b,c,d are dummy place holders
  218. ; ------------------------------------------------------------
  219. PROC InsertMessage_u(a,b,c,d)
  220.    PRIVATE Procname.a,
  221.            n
  222.    Procname.a = "InsertMessage_u"
  223.       WINDOW HANDLE DIALOG TO dialog_w
  224.       SETCANVAS dialog_w
  225.       FOR n FROM 1 TO lines_n - 1
  226.        @ n-1 ,1
  227.          ?? FORMAT("W"+STRVAL(maxline_n)+",AC",message_bag[STRVAL(n)])
  228.       ENDFOR
  229.       PAINTCANVAS ATTRIBUTE 32 0,1,lines_n+1,maxline_n+1
  230. ENDPROC
  231. ;("InsertMessage_u")
  232.  
  233. ; ============================================================
  234. ; 11-02-92
  235. ; Restores canvas
  236. ; ------------------------------------------------------------
  237. PROC RestoreCanvas_u(canvas_h)
  238.    PRIVATE Procname_a
  239.    Procname_a = "RestoreCanvas_u"
  240.    IF ISWINDOW(canvas_h) THEN
  241.       SETCANVAS canvas_h
  242.    ELSE
  243.       SETCANVAS DEFAULT
  244.    ENDIF
  245. ENDPROC
  246. ;("RestoreCanvas_u")
  247.  
  248. ; ============================================================
  249. ; 11-03-92
  250. ; Restores old window selection
  251. ; ------------------------------------------------------------
  252. PROC RestoreWindow_l(window_h)
  253.    PRIVATE Procname_a,
  254.            default_h
  255.    Procname_a = "RestoreWindow_l"
  256.    IF ISWINDOW(window_h) THEN
  257.       WINDOW SELECT window_h
  258.       WINDOW SELECT window_h
  259.       RETURN true
  260.    ELSE
  261.       ;--let's try and land on the first image if available
  262.       ;  as a default 'landing place"
  263.       WINDOW HANDLE IMAGE 1 TO default_h
  264.       IF ISWINDOW(default_h) THEN
  265.          WINDOW SELECT default_h
  266.          WINDOW SELECT default_h
  267.       ELSE
  268.       GeneralMessage_u("ERROR !!  Warning the system has ecountered an   /"+
  269.                        "and error in restoring the current window handle./"+
  270.                        "Make note of where in the program this occurred, /"+
  271.                        "exit the program and restart.  Anykey continues  /")
  272.         RETURN FALSE
  273.      ENDIF
  274.    ENDIF
  275. ENDPROC
  276. ;("RestoreWindow_l")
  277.  
  278. ; ============================================================
  279. ; 11-10-92
  280. ; Saves the current window handle and returns that value
  281. ; ------------------------------------------------------------
  282. PROC SaveWindowHandle_n()
  283.    PRIVATE Procname_a,
  284.            ihandle_h,
  285.            fhandle_h,
  286.            chandle_h
  287.    Procname_a = "SaveWindowHandle_n"
  288.    WINDOW HANDLE IMAGE IMAGENO() TO ihandle_h
  289.    WINDOW HANDLE FORM TO fhandle_h
  290.    WINDOW HANDLE CURRENT TO chandle_h
  291.    ;-- the following logic is that if a form handle is there it is
  292.    ;   the one we want returned, next is a image handle,
  293.    ;   and lastly the current window
  294.    SWITCH
  295.       CASE fhandle_h <> 0 : RETURN fhandle_h
  296.       CASE ihandle_h <> 0 : RETURN ihandle_h
  297.       CASE chandle_h <> 0 : RETURN chandle_h
  298.       OTHERWISE:
  299.          GeneralMessage_u("ERROR, Expecting a window handle assignment/"+
  300.                           "no windows present.  Exit module and report/"+
  301.                           "error message..   Anykey continues..      /")
  302.          RETURN 0
  303.    ENDSWITCH
  304. ENDPROC
  305. ;("SaveWindowHandle_n")
  306.  
  307. ; ============================================================
  308. ; 11-10-92
  309. ; Save the current workspace position
  310. ; ------------------------------------------------------------
  311. PROC SaveWorspace_u()
  312.    PRIVATE Procname_a
  313.    Procname_a = "SaveWorspace_u"
  314.    sv_current_h = SaveWindowHandle_n()
  315.    sv_oldcanvas_h = GETCANVAS()
  316.    sv_cfield_a = FIELD()
  317.    sv_ctable_a = TABLE()
  318.    sv_mode_a = SYSMODE()
  319. ENDPROC
  320. ;("SaveWorspace_u")
  321.  
  322. ; ============================================================
  323. ; 11-10-92
  324. ; Restores workspace
  325. ; ------------------------------------------------------------
  326. PROC RestoreWorkspace_u()
  327.    PRIVATE Procname_a
  328.    Procname_a = "RestoreWorkspace_u"
  329.    RestoreWindow_l(sv_current_h)
  330.    RestoreCanvas_u(sv_oldcanvas_h)
  331.    If sv_mode_a = "CoEdit" THEN
  332.       COEDITKEY
  333.    ENDIF
  334.    MOVETO sv_ctable_a
  335.    MOVETO FIELD sv_cfield_a
  336.    IF ISASSIGNED(g_edit_a) THEN
  337.      IF g_edit_a = "View" THEN
  338.         IMAGERIGHTS READONLY
  339.      ENDIF
  340.    ENDIF
  341.    ;--release all vars associated with the saveworkspace procedures
  342.    RELEASE VARS sv_current_h, sv_oldcanvas_h, sv_mode_a,sv_cfield_a,sv_ctable_a
  343. ENDPROC
  344. ;("RestoreWorkspace_u")
  345.  
  346. ; ===========================================================================
  347. ; gets and lists the handles/titles/origin location/size of all current
  348. ; windows on the desktop  and sends info to printer so as to not distrub
  349. ; the current environment, can be place within any procedure to print a
  350. ; running log of window positions and status for debugging purposes...
  351. ; The break_a var is used for times you want to insert this into your code
  352. ; and assign a value to the break_a var to indicate the location of this
  353. ; printout in the code.  (use as a window status "break"point..)
  354. ; ---------------------------------------------------------------------------
  355. PROC DebugWindowInfo_u(break_a)
  356.    PRIVATE  Procname_a,
  357.             currentstuff,
  358.             N,
  359.             windowhandlelist_r,
  360.             X,
  361.             wininfo_bag,
  362.             printset_a
  363.    Procname_a = "DebugWindowInfo_u"
  364.    OPEN PRINTER
  365.      PRINT  FORMAT("W80,AC","* * * CURRENT WORKSPACE STATUS PRINTOUT * * *"),"\n\n",
  366.             "BREAK POINT DISCRIPTION: ", break_a, "\n\n",
  367.              FORMAT("W80,AC",FILL("≡",60)),"\n\n"
  368.    DYNARRAY  currentstuff[]
  369.    ;--find current status of windows
  370.      ;current window
  371.         currentstuff["CURRENT_WINDOW_HANDLE_GETWINDOW"] = GETWINDOW()
  372.         WINDOW HANDLE CURRENT TO currentstuff["CURRENT_WINDOW_HANDLE_CURRENT"]
  373.         WINDOW HANDLE FORM TO currentstuff["CURRENT_WINDOW_HANDLE_FORM"]
  374.         WINDOW HANDLE DIALOG TO currentstuff["CURRENT_WINDOW_HANDLE_DIALOG"]
  375.      ;current image
  376.         WINDOW HANDLE IMAGE IMAGENO() TO currentstuff["CURRENT_IMAGE_HANDLE"]
  377.      ;current canvas
  378.         currentstuff["CURRENT_CANVAS_HANDLE"] = GETCANVAS()
  379.      ;current image number
  380.         currentstuff["CURRENT_IMAGE_NUMBER"] = IMAGENO()
  381.      ;current image type
  382.         currentstuff["CURRENT_IMAGETYPE_WHERE_CURSOR_IS"] = IMAGETYPE()
  383.      ;number of current images
  384.         currentstuff["CURRENT_NUMBER_OF_IMAGES"] = NIMAGES()
  385.      ;---------print current status
  386.         PRINT  FORMAT("W80,AC",">> Current positions <<"),"\n",
  387.                FORMAT("W80,AC",FILL("▀",25)),"\n"
  388.                FOREACH N IN currentstuff
  389.                   PRINT SPACES(5),
  390.                         FORMAT("W35,AL",N), " = ",
  391.                         FORMAT("W20,AL",currentstuff[N]),"\n"
  392.                ENDFOREACH
  393.      ;---------window analysis
  394.         PRINT  FORMAT("W80,AC",">> Window Info in Z order, Highest first <<"),"\n",
  395.                FORMAT("W80,AC",FILL("▀",40)),"\n\n"
  396.      ;number of current window handles
  397.         WINDOW LIST TO windowhandlelist_r
  398.         FOR X FROM 1 TO ARRAYSIZE(windowhandlelist_r)
  399.              WINDOW GETATTRIBUTES windowhandlelist_r[X] TO wininfo_bag
  400.                IF wininfo_bag["FLOATING"] THEN
  401.                   PRINT FILL("*",5),
  402.                         FORMAT("W15,AL","Window handle" ), " = ",
  403.                         FORMAT("W10,AL",windowhandlelist_r[X]),
  404.                         "  THIS WINDOW IS ABOVE THE GLOBAL ECHO LAYER","\n"
  405.                ELSE
  406.                   PRINT FILL(".",5),
  407.                         FORMAT("W15,AL","Window handle" ), " = ",
  408.                         FORMAT("W20,AL",windowhandlelist_r[X]),"\n"
  409.                ENDIF
  410.                FOREACH N IN wininfo_bag
  411.                   printset_a = "CANVAS,ECHO,FLOATING,HASFRAME,MAXIMIZED,"+
  412.                                 "ORIGINCOL,ORIGINROW,TITLE,WIDTH,HEIGHT"
  413.                  IF SEARCH(N,printset_a)>0 THEN
  414.                   PRINT SPACES(10),
  415.                         FORMAT("W20,AL",N), " = ",
  416.                         FORMAT("W20,AL",wininfo_bag[N]),"\n"
  417.                  ENDIF
  418.                ENDFOREACH
  419.                    PRINT "\n\n"
  420.         ENDFOR
  421.         PRINT "\f"
  422.      CLOSE PRINTER
  423. ENDPROC
  424. ;("DebugWindowInfo_u")
  425.  
  426. ; ============================================================
  427. ; 10-21-92
  428. ; A spartan version of "DebugWindowInfo_u" for use in tractunner
  429. ; ------------------------------------------------------------
  430. PROC DebugWin_u()
  431.    PRIVATE Procname_a,
  432.            currentstuff,
  433.            label_a,
  434.            wininfo_bag,
  435.            firstrow_a,
  436.            secondrow_a,
  437.            printset_a,
  438.            X,
  439.            N,
  440.            windowhandlelist_r
  441.    Procname_a = "DebugWin_u"
  442.    OPEN PRINTER
  443.    DYNARRAY  currentstuff[]
  444.    ;--find current status of windows
  445.      ;current window
  446.         currentstuff["CURRENT_WINDOW_HANDLE_GETWINDOW"] = GETWINDOW()
  447.         WINDOW HANDLE CURRENT TO currentstuff["CURRENT_WINDOW_HANDLE_CURRENT"]
  448.         WINDOW HANDLE FORM TO currentstuff["CURRENT_WINDOW_HANDLE_FORM"]
  449.         WINDOW HANDLE DIALOG TO currentstuff["CURRENT_WINDOW_HANDLE_DIALOG"]
  450.      ;current image
  451.         WINDOW HANDLE IMAGE IMAGENO() TO currentstuff["CURRENT_IMAGE_HANDLE"]
  452.      ;current canvas
  453.         currentstuff["CURRENT_CANVAS_HANDLE"] = GETCANVAS()
  454.      ;current image number
  455.         currentstuff["CURRENT_IMAGE_NUMBER"] = IMAGENO()
  456.      ;current image type
  457.         currentstuff["CURRENT_IMAGETYPE_WHERE_CURSOR_IS"] = IMAGETYPE()
  458.      ;number of current images
  459.         currentstuff["CURRENT_NUMBER_OF_IMAGES"] = NIMAGES()
  460.      ;---------print current status
  461.         PRINT  FORMAT("W80,AC",">> Current positions <<"),"\n",
  462.                FORMAT("W80,AC",FILL("▀",25)),"\n"
  463.                FOREACH N IN currentstuff
  464.                   PRINT SPACES(5),
  465.                         FORMAT("W35,AL",N), " = ",
  466.                         FORMAT("W20,AL",currentstuff[N]),"\n"
  467.                ENDFOREACH
  468.         PRINT "\n\n"
  469.      ;---------window analysis
  470.         PRINT  FORMAT("W80,AC",">> Window Info in Z order, Highest first <<"),"\n",
  471.                FORMAT("W80,AC",FILL("▀",40)),"\n\n"
  472.      ;number of current window handles
  473.         WINDOW LIST TO windowhandlelist_r
  474.         FOR X FROM 1 TO ARRAYSIZE(windowhandlelist_r)
  475.              WINDOW GETATTRIBUTES windowhandlelist_r[X] TO wininfo_bag
  476.                IF wininfo_bag["FLOATING"] THEN
  477.                   PRINT FILL("█",2),
  478.                         FORMAT("W15,AL","Window handle" ), "= ",
  479.                         FORMAT("W5,AL",windowhandlelist_r[X])
  480.                ELSE
  481.                   PRINT FILL(".",2),
  482.                         FORMAT("W15,AL","Window handle" ), " = ",
  483.                         FORMAT("W5,AL",windowhandlelist_r[X])
  484.                ENDIF
  485.                printset_a = "ORIGINCOL,ORIGINROW,TITLE"
  486.                ;--reset print rows
  487.                firstrow_a = ""
  488.                secondrow_a = ""
  489.                FOREACH N IN wininfo_bag
  490.                  IF SEARCH(N,printset_a)>0 THEN
  491.                     SWITCH
  492.                      CASE N = "ORIGINCOL": label_a = "COL"
  493.                         firstrow_a = firstrow_a +
  494.                               FORMAT("W4,AL",label_a)+ " = "+
  495.                               FORMAT("W6,AL",wininfo_bag[N])
  496.                      CASE N = "ORIGINROW": label_a = "ROW"
  497.                         firstrow_a = firstrow_a +
  498.                               FORMAT("W4,AL",label_a)+ " = "+
  499.                               FORMAT("W6,AL",wininfo_bag[N])
  500.                      CASE N = "TITLE": label_a = "TITLE"
  501.                         secondrow_a = secondrow_a +
  502.                               FORMAT("W6,AL",label_a)+ " = "+
  503.                               FORMAT("W35,AL",wininfo_bag[N])
  504.                     ENDSWITCH
  505.                  ENDIF
  506.                ENDFOREACH
  507.                PRINT firstrow_a,"\n", SPACES(10),secondrow_a,"\n"
  508.         ENDFOR
  509.         PRINT "\f"
  510.      CLOSE PRINTER
  511. ENDPROC
  512. ;("DebugWin_u")
  513.  
  514.